/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// NHP协议的浙政钉小程序 Demo
// 版本号：v1.0 (发布于2023-12-07）
// 关于NHP协议的定义，请参见中国计算机学会CCF的《零信任网络隐身协议规范》
//
/////////////////////////////////////////////////////////////////////////////////////////////////////

import dd from "gdt-jsapi"; // 引用钉钉库
import nhp from "../sdk/nhpzzd"; // 引用NHP浙政钉库

// Demo 环境设定
const DEMO_VER = "v1.0";
const DEMO_API_URL = "https://apidemo.huzhou.gov.cn/api/apidemo"; // 目标API地址
var demoData = {
  ver : DEMO_VER // demo程序版本号
};

// 错误码
const ERR_SUCCESS = 0; // 成功
const ERR_HTTPREQ = -1; // 对API服务器的HTTP请求失败为-1

// 执行函数：apiDemoCall，对Demo服务器API进行调用，确认NHP敲门是否成功。
// 如果NHP敲门成功，则API服务器能正常返回。
// 如果NHP敲门失败，则API服务器的返回将失败。
function apiDemoCall(demoData, callback) {
  // API 请求
  dd.httpRequest({
    url: DEMO_API_URL,
    method: "GET",
    headers: {
      "Content-Type": "text/plain"
    },
    dataType: "text"
  }).then((apiResult) => {
    // 判断是否HTTP请求成功（200）
    if ((apiResult.status == 200)) {
      // 解析API 返回值
      var apiAry = apiResult.data.split(" ");
      const timestampStr = apiAry[0];
      const dateTime = timestampStr.split("+")[0];
      var apiJson = {
        date: dateTime.split("T")[0],
        time: dateTime.split("T")[1],
        remoteAddr: apiAry[1]
      }
      console.info(" - - API请求返回值 - - -");
      console.info(apiJson);
      
      // 返回给demoData 作为输出
      demoData.apiJson = apiJson;
      
      // 返回成功
      callback(ERR_SUCCESS, demoData);
    } else {
      // HTTP请求失败
      callback(ERR_HTTPREQ);
    } //if ((apiResult.status == 200)) {
  }).catch((err) => {}); //dd.httpRequest(）
} // function apiDemoCall()

/**
 * Demo浙政钉主函数
 * 用于 nhp.open 的使用方法演示，具体的执行函数为 apiDemoCall
 *
 * @param {function} callback 回调函数，callback(errCode, demoData)，errCode为错误码，demoData为返回JSON数据
 */
function demoZZD(callback) {
  // NHP使用示例代码，使用NHP时需要拷贝以下代码，并且进行调用参数的修改
  // NHP调用参数设定
  const NHP_SERVER = "nhp.huzhou.gov.cn"; // NHP服务器地址
  const ASP_ID = "zzd-mini-app-demo"; // 授权服务提供商ASP的ID，例如 "zzd"表示浙政钉、"zlb"表示浙里办
  const RES_ID = "apidemo.huzhou.gov.cn"; // 资源ID，一般为目标资源的域名或者IP，可以加端口，例如："api.xyz.com:8080"
  const NHP_INTERVAL = 20 * 1000; // 20秒

  // 启动NHP敲门
  nhp.open(
    NHP_INTERVAL, // internval 敲门间隔
    NHP_SERVER,   // nhpServer NHP服务器地址
    ASP_ID,       // aspId 授权服务提供商ASP的ID
    RES_ID,       // resId 目标资源的ID
    function(nhpJson) {
      if (nhpJson.errCode == nhp.ERR_CODE.success) {
        // NHP返回成功
        demoData.nhpJson = nhpJson;
        // 调用API服务器
        apiDemoCall(demoData, callback);
      } else {
        // 输出错误消息
        callback(nhpJson.errMsg);
      }
    }
  );
}


Page({
  data: {
    token: "", // DD客户端token
    nhpResultData: "", // NHP服务返回结果
    apiResultData: "", // API服务返回结果 
  },

  onLoad(query) {
    // 页面加载

    // 变量声明
    var that = this;

    console.info("- - - demo start - - -");
    demoZZD(function (errCode, demoData) {
      console.info("errCode: ", errCode);
      console.info("demoData: ", JSON.stringify(demoData));

      // 设置 token, nhpResultData, 
      that.setData({
        token: demoData.nhpJson.appToken, // DD客户端token
        nhpResultData: JSON.stringify(demoData.nhpJson), // NHP服务返回结果
        apiResultData: JSON.stringify(demoData.apiJson)  // API服务返回结果 
      });
    });
  },

  onReady() {
    // 页面加载完成
  },
  onShow() {
    // 页面显示
  },
  onHide() {
    // 页面隐藏
  },
  onUnload() {
    // 页面被关闭
  },
  onTitleClick() {
    // 标题被点击
  },
  onPullDownRefresh() {
    // 页面被下拉
  },
  onReachBottom() {
    // 页面被拉到底部
  },
  onShareAppMessage() {
    // 返回自定义分享信息
    return {
      title: "零信任防护浙政钉小程序",
      desc: "描述：使用零信任防护浙政钉",
      path: "pages/index/index",
    };
  },
});